﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ImpactTenis.AcessoADados.DTOs;
using ImpactTenis.AcessoADados.ConsultasSQL;
using System.Configuration;
using System.Data.SqlClient;

namespace ImpactTenis.AcessoADados.Caixas
{
    public class CaixasDados
    {
        private string _connectionString { get; set; }

        public CaixasDados() 
        {
            _connectionString = ConfigurationManager.ConnectionStrings["ImpactTenis"].ConnectionString;
        }

        public List<ProdutoDTO> BuscaProdutosVenda(int numProduto)
        {
            try
            {
                using (var conexao = new SqlConnection(_connectionString))
                {
                    var command = new SqlCommand(ConsultasSQL.SQL.ConsultaLocalizaProdutoVenda(), conexao);
                    command.Parameters.AddWithValue("@NumProduto", numProduto);
                    
                    var produto = new List<ProdutoDTO>();
                    conexao.Open();

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            produto.Add(
                                new ProdutoDTO
                                {
                                    Id = Convert.ToInt16(reader["NumeroProduto"].ToString()),

                                    Modelo = reader["Modelos"].ToString(),

                                    Cor = new CoresDTO { Descricao = reader["Cores"].ToString() },

                                    Marca = new MarcaDTO { Nome = reader["Marcas"].ToString() },

                                    Tamanho = new TamanhoDTO { Descricao = reader["Tamanho"].ToString() },

                                    Preco = Convert.ToDecimal(reader["Precos"].ToString()),

                                    Estoque = reader["LocalEstoque"].ToString(),

                                    statusEstoque = reader["StatusEstoque"].ToString(),

                                    Quantidade = Convert.ToInt16(reader["Quantidade"].ToString())
                                });

                        }
                    }

                    return produto;
                }
            }
            catch
            {
                throw new Exception("Erro na consulta de carregar produtos");
            }
        }

        public Boolean CadastroDeVendas(string valorproduto, int formapag, string valorrecebido, string troco, int produto)
        {
            try
            {
                using (var conexao = new SqlConnection(_connectionString))
                {
                    conexao.Open();
                    SqlCommand comando = new SqlCommand(ConsultasSQL.SQL.CadastraVendasDeProduto(), conexao);
                    comando.Parameters.AddWithValue("@ValorProduto",valorproduto);
                    comando.Parameters.AddWithValue("@IdFormaPag",formapag);
                    comando.Parameters.AddWithValue("@ValorRecebido",valorrecebido);
                    comando.Parameters.AddWithValue("@Troco",troco);
                    comando.Parameters.AddWithValue("@IdProdutoVendido", produto);

                    if (comando.ExecuteNonQuery() > 0)
                    {
                        conexao.Close();
                        return true;
                    }

                    conexao.Close();
                    return false;
                }
            }
            catch
            {
                throw new Exception("Não foi possível cadastrar a venda");
            }
        }
    }
}
